namespace是指标识符的各种可见范围。命名空间用关键字namespace 来定义。命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。
1 直接指定标识符
例如std::iostream而不是iostream。完整语句如下:
std::cout<<std::hex<<3.4<<std::endl;
2 使用using关键字
加入using std::cout; using std::endl; using std::cin; 则前面语句可以写成如下代码:
cout << hex << 3.4 << endl;
3 使用using namespace std
例如:
#include #include #include using namespace std;
在C++下,若要使用C中已有库中的函数如stdio,文件包含方式为前面加一个c,同时去掉.h后缀,如#include <cstdio>,同时必须加上using namaspace;对于其他类似的函数同 对于C++特有的库,直接用去掉.h后缀的文件包含,并加上using namaspace; C++头文件包含何时要加.h,何时不加.h,何时在前面加c? a. 如果这个头文件是旧C++特有的,那么去掉 h后缀,并放入std名字空间, 比如 iostream.h 变为 iostream. 因此,若要使用iostream库中函数,文件包含为 若只写#include <iostream>,而没有using namespace std;,会报错: 因为cout是在std中命名的,必须加上using namespace std; 可能在早期的编译器中,也支持#include <iostream.h>,可不用写using namespace std,但用VS2010编译,会报错Cannot open include file: 'iostream.h': No such file or directory。 b. 如果这个头文件是C也有的,那么去掉 h后缀,增加一个c前缀,比如 string.h变为 cstring;stdio.h 变为 cstdio, 等等 cstdio是将stdio.h的内容用C++头文件的形式表示出来。stdio.h是C标准函数库中的头文件,即:standard buffered input&output。提供基本的文字的输入输出流操作(包括屏幕和文件等)。由于C语言并没有提供专用于文字输入输出的关键字,所以该库是最普遍的C语言程序加载库。 stdio.h是以往的C和C++的头文件,cstdio是标准C++(STL),且cstdio中的函数都是定义在一个名字空间std里面的,如果要调用这个名字空间的函数,必须得加std::或者在文件中声明use namespace std。 在C语言中,stdio.h 头文件是主要的。而在后来的C++语言中,C只是C++的一个子集,且C++中,已不推荐再用C的类库,但为了对已有代码的保护,还是对原来的头文件支持。 cstdio是c++从C的stdio.h继承来的,在前面加C同时不要H后缀,在C++环境当然是选用前者,两者内容都一样,只是cstdio头文件中定义的名字被定义在命名空间std中。使用后者就会带来额外的负担,需要区分哪些是标准库C++特有的,哪些是继承过来的!!所以在C++中要尽量避免C风格的出现!! 1 标准库中的头文件 C++标准库中的一切内容都被放在名字空间std中(名字空间中的内容对外是不可见的),但是带来了一个新问题,无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,如声明在<iostream.h>等头文件中的功能,使用std包装标准库导致现有代码的不可用,为了兼容这种情况,标准委员会为包装了std的那部分标准库创建了新的头文件,新的头文件的文件名与旧的一样,只是没有.h这个后缀,如<iostream.h>就变成了<iostream>。对于C头文件,采用同样的方法,但还在每个头文件名前加了字符c,如<string.h>就变成了<cstring>,<stdio.h>变成了<cstdio>。最好使用新的文件头,使用新的文件头的C++程序,需要使用using namespace std或者using namespace std::指定的类名,等方法来使需要的类对于我们的代码可视。 2 自定义的头文件 为了防止头文件被重复引用,最好使用预处理定义,如下所示: #ifndef MYHEAD_H #define MYHEAD_H ……//头文件中的内容 #endif (1)#ifndef: 指示符#ifndef用来检查头文件的内容是否在前面已经被定义过,如果定义过,则#ifndef与#endif之间的语句将不被执行.所以习惯上要把头文件的定义写在这两个语句之间. 如:对于MYHEAD.H这个头文件 (2) #ifdef 指示符#ifdef常常被用来判断一个预处理器常量是否已被定义,以便有条件地包含程序代码。 3 预处理相关知识 (1) #ifdef :判断一个预处理常量是否被定义,如#infef DEGUG (2) #ifndef:判断一个预处理常量是否没被定义 (3) #define:定义一个预处理常量,如#define DEBUG (4) #include (5) #endif (6) 对预处理常量的定义还可以在编译时进行,如CC –D DEBUG main.c (7)编译C++程序时,编译器自动定义了一个预处理器名字__cplusplus(注意前面有两个下划线),因此可以根据这个来判断该程序是否是C++程序,以便有条件地包含一些代码,如: (8)在编译C程序时,编译器会自动定义预处理常量__STDC__。当然__cplusplus和__STDC__ 不会同时被定义; (9)另外两个比较有用的预定义常量是__LINE__(记录文件已经被编译的行数)和__FILE__(包含正在被编译的文件名称)。使用如下: (10) __DATE__:编译日期,当前被编译文件的编译日期 (11) __TIME__:编译时间,当前被编译文件的编译时间 格式如:hh:mm:ss 08:17:05 Oct 31 2006 (12) C库头文件的C++名字总是以字母C开头,后面去掉.h,如assert.h在C++中为cassert; assert()是C语言标准库中提供的一个通用预处理器宏。常用其来判断一个必需的前提条件,以便程序能够正确执行。与其关联的头文件是:#include <assert.h> 其c++名字是:cassert C库头文件的C++名字总是以字母C开头 注:在C++中使用C标准库中的头文件时,一定要使用using namespace std;来使其处在一个名字空间中,才能正确使用 (13)在C++中头文件后缀各不相同,因此标准的C++头文件没有指定后缀 4 C++中的文件输入输出 头文件:#include <fstream> 使用文件输入输出实例: 头文件里有些什么?
头文件的使用主要体现在两个方面,一个是重(音chóng)用(即多次使用),另一个是共用。 那些提供标准库函数的头文件就是为了重用。很多程序或工程可能会用到这些标准库函数,把它们写在头文件里面,每次使用的时候只需要包含已经完成的头文件就可以了。 头文件的共用主要体现在C++的多文件结构中。由于目前的程序规模较小,尚不需要用到多文件结构,所以在此对头文件的共用不作展开。有兴趣的读者可以查阅相关书籍。 那么,如果我们要自己编写一个可以重用的头文件,里面应该写些什么呢? 类似于标准库函数,我们在头文件里面应该模块化地给出一些函数或功能。另外还应该包括独立实现这些函数或功能的常量、变量和类型的声明。 stdio.h及cstdio的区别
using namespace std;
error C2065: 'cout' : undeclared identifier
类型
名字
功能
语言支持
cstddef
语言支持
limits
定义各种数据类型最值常量
语言支持
climits
语言支持
cfloat
语言支持
cstdlib
提供支持程序启动和终止的宏和函数
语言支持
new
语言支持
typeinfo
语言支持
exception
异常处理类
语言支持
cstdarg
语言支持
csetjmp
语言支持
csignal
输入\输出
iostream
支持标准流cin、cout、cerr和clog的输入和输出;以及多字节。
输入\输出
iomanip
参数化输入/输出
输入\输出
ios
定义iostream的基类;
输入\输出
istream
基本输入流
输入\输出
ostream
基本输出流
输入\输出
sstream
基于字符串的流
输入\输出
fstream
支持文件的流输入和输出;
输入\输出
iosfwd
输入/输出系统使用的前置声明
输入\输出
streambuf
底层输入/输出支持
输入\输出
cstdio
为标准流提供C样式的输入和输出;
输入\输出
cwchar
宽字符处理及输入/输出
诊断
stdexcept
标准异常类
诊断
cassert
诊断
cerrno
定义错误码
一般工具
utility
定义重载的关系运算符,简化关系运算符的写入;
一般工具
funcional
定义许多函数对象类型和支持函数对象的功能
一般工具
memory
给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器;
一般工具
ctime
支持系统时间函数
字符串处理
string
字符串类
字符串处理
cctype
字符处理
字符串处理
cwctype
宽字符分类
字符串处理
cstring
为处理非空字节序列和内存块提供函数;
字符串处理
cwchar
宽字符处理及输入/输出
字符串处理
cstdlib
字符串转换
容器类
vector
STL 动态数组容器
容器类
list
STL 线性列表容器
容器类
deque
STL 双端队列容器
容器类
queue
STL 队列容器
容器类
stack
STL 堆栈容器
容器类
map
STL 映射容器
容器类
set
STL 集合容器
容器类
bitset
STL 位集容器
迭代器
iterator
算法
algorithm
STL 通用算法
算法
cstdlib
声明C标准库函数bsearch()和qsort(),进行搜索和排序;
算法
ciso646
数值操作
complex
复数类
数值操作
vararray
数值操作
numeric
数值操作
cmath
定义数学函数
数值操作
cstdlib
提供的函数可以提取整数的绝对值,对整数进行取余和日期表示
本地化
locale
本地化
clocale
定义本地化函数